home *** CD-ROM | disk | FTP | other *** search
- //***********************************************************************
- //
- // Paint4Doc.cpp
- //
- //***********************************************************************
-
- #include <afxwin.h>
- #include "Resource.h"
- #include "CLine.h"
- #include "Paint4Doc.h"
-
- IMPLEMENT_DYNCREATE (CPaintDoc, CDocument)
-
- BEGIN_MESSAGE_MAP (CPaintDoc, CDocument)
- ON_COMMAND (ID_FILE_SEND_MAIL, OnFileSendMail)
- ON_COMMAND_RANGE (ID_WIDTH_VTHIN, ID_WIDTH_VTHICK, OnWidth)
- ON_COMMAND_RANGE (ID_COLOR_BLACK, ID_COLOR_WHITE, OnColor)
- ON_UPDATE_COMMAND_UI (ID_FILE_SEND_MAIL, OnUpdateFileSendMail)
- ON_UPDATE_COMMAND_UI_RANGE (ID_WIDTH_VTHIN, ID_WIDTH_VTHICK,
- OnUpdateWidthUI)
- ON_UPDATE_COMMAND_UI_RANGE (ID_COLOR_BLACK, ID_COLOR_WHITE,
- OnUpdateColorUI)
- END_MESSAGE_MAP ()
-
- const COLORREF CPaintDoc::m_crColors[8] = {
- RGB ( 0, 0, 0), // Black
- RGB ( 0, 0, 255), // Blue
- RGB ( 0, 255, 0), // Green
- RGB ( 0, 255, 255), // Cyan
- RGB (255, 0, 0), // Red
- RGB (255, 0, 255), // Magenta
- RGB (255, 255, 0), // Yellow
- RGB (255, 255, 255) // White
- };
-
- CPaintDoc::CPaintDoc ()
- {
- m_lineArray.SetSize (0, 64);
- }
-
- BOOL CPaintDoc::OnNewDocument ()
- {
- if (!CDocument::OnNewDocument ())
- return FALSE;
-
- InitWidthAndColor ();
- return TRUE;
- }
-
- BOOL CPaintDoc::OnOpenDocument (LPCTSTR lpszPathName)
- {
- if (!CDocument::OnOpenDocument (lpszPathName))
- return FALSE;
-
- InitWidthAndColor ();
- return TRUE;
- }
-
- void CPaintDoc::InitWidthAndColor ()
- {
- m_nColor = ID_COLOR_RED - ID_COLOR_BLACK;
- m_nWidth = ID_WIDTH_MEDIUM - ID_WIDTH_VTHIN;
- }
-
- void CPaintDoc::DeleteContents ()
- {
- int nCount = m_lineArray.GetSize ();
-
- if (nCount) {
- for (int i=0; i<nCount; i++)
- delete m_lineArray[i];
- m_lineArray.RemoveAll ();
- }
- }
-
- void CPaintDoc::Serialize (CArchive& ar)
- {
- m_lineArray.Serialize (ar);
- }
-
- CLine* CPaintDoc::AddLine (CPoint ptFrom, CPoint ptTo)
- {
- static UINT nWidths[5] = { 1, 8, 16, 24, 32 };
-
- CLine* pLine;
- try {
- pLine = new CLine (ptFrom, ptTo, nWidths[m_nWidth],
- m_crColors[m_nColor]);
- m_lineArray.Add (pLine);
- SetModifiedFlag ();
- }
- catch (CMemoryException* e) {
- if (pLine != NULL) {
- delete pLine;
- pLine = NULL;
- }
- AfxMessageBox ("Out of memory", MB_ICONSTOP | MB_OK);
- e->Delete ();
- }
- return pLine;
- }
-
- CLine* CPaintDoc::GetLine (int nIndex)
- {
- return (CLine*) m_lineArray[nIndex];
- }
-
- int CPaintDoc::GetLineCount ()
- {
- return m_lineArray.GetSize ();
- }
-
- void CPaintDoc::OnWidth (UINT nID)
- {
- m_nWidth = nID - ID_WIDTH_VTHIN;
- }
-
- void CPaintDoc::OnColor (UINT nID)
- {
- m_nColor = nID - ID_COLOR_BLACK;
- }
-
- void CPaintDoc::OnUpdateWidthUI (CCmdUI* pCmdUI)
- {
- pCmdUI->SetCheck ((pCmdUI->m_nID - ID_WIDTH_VTHIN) == m_nWidth);
- }
-
- void CPaintDoc::OnUpdateColorUI (CCmdUI* pCmdUI)
- {
- pCmdUI->SetCheck ((pCmdUI->m_nID - ID_COLOR_BLACK) == m_nColor);
- }
-